package hr.ctg.domain.action;

import hr.ctg.domain.action.objekt.SearchParameters;
import hr.ctg.domain.model.Mjesto;
import hr.ctg.domain.model.Objekt;
import hr.ctg.domain.model.Otok;
import hr.ctg.domain.model.TipObjekta;
import hr.ctg.domain.model.Zupanija;
import hr.ctg.service.dao.MjestoDAO;
import hr.ctg.service.dao.ObjektDAO;
import hr.ctg.service.dao.OtokDAO;
import hr.ctg.service.dao.ParkDAO;
import hr.ctg.service.dao.TipObjektaDAO;
import hr.ctg.service.dao.ZupanijaDAO;

import java.util.Iterator;

import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Out;
import org.jboss.seam.annotations.web.RequestParameter;
import org.jboss.seam.log.Log;

@Name("breadcrumbsAction")
public class BreadcrumbsAction {
	@In
	ObjektDAO objektDAO;
	@In
	MjestoDAO mjestoDAO;
	@In
	OtokDAO otokDAO;
	@In
	ZupanijaDAO zupanijaDAO;
	@In
	TipObjektaDAO tipObjektaDAO;
	@In
	ParkDAO parkDAO;

	@In("searchParameters")
	SearchParameters searchParametersBean;

	@Logger
	Log log;

	@Out(required = false)
	TipObjekta tipObjektaB;
	@Out(required = false)
	Mjesto mjestoB;
	@Out(required = false)
	Zupanija zupanijaB;
	@Out(required = false)
	Otok otokB;
	@Out(required = false)
	Objekt objektB;
	@Out(required = false)
	String tipParkaB;

	// @RequestParameter
	// String nazivMjesta;
	@RequestParameter
	Integer idTipaObjekta;
	@RequestParameter
	Integer idObjekta;
	@RequestParameter
	Integer idMjesta;
	@RequestParameter
	Integer idZupanije;
	// @RequestParameter
	// String searchParameters;
	@RequestParameter
	Integer idOtoka;
	@RequestParameter
	String tipParka;
	@RequestParameter
	Integer idParka;
	@RequestParameter
	String searchParameters;

	public void create() {
		if (searchParameters != null && searchParametersBean != null) {
			// final SearchParameters parameters = (Map) SearchParameters.ge
			// .getAsObject(searchParameters);
			if (searchParametersBean.getTipObjekta() != null) {
				idTipaObjekta = searchParametersBean.getTipObjekta()
						.getIdTipaObjekta();
			}
			// nazivMjesta = searchParameters.getNazivMjesta();
			if (searchParametersBean.getMjesto() != null) {
				idMjesta = searchParametersBean.getMjesto().getIdMjesta();
			}
		}
		if (idObjekta != null) {
			objektB = objektDAO.find(idObjekta);
		}
		if (objektB != null) {
			mjestoB = objektB.getMjesto();
			tipObjektaB = objektB.getTipObjekta();
		}
		if (idMjesta != null) {
			mjestoB = mjestoDAO.find(idMjesta);
		}
		// if (mjestoB == null && nazivMjesta != null) {
		// try {
		// // System.out.println("nazivMjesta:" + nazivMjesta);
		// mjestoB = (Mjesto) entityManager.createNamedQuery(
		// "Mjesto.findByNaziv").setParameter(1, nazivMjesta)
		// .getSingleResult();
		// } catch (final Exception e) {
		// log.error(e.getMessage(), e);
		// final List<Mjesto> r = entityManager.createNamedQuery(
		// "Mjesto.findByNaziv").setParameter(1, nazivMjesta)
		// .getResultList();
		// if (r.size() > 0) {
		// mjestoB = r.get(0);
		// }
		// }
		// }
		if (idZupanije != null) {
			zupanijaB = zupanijaDAO.find(idZupanije);
		}
		if (mjestoB != null) {
			zupanijaB = mjestoB.getZupanija();
			otokB = mjestoB.getOtok();
		}
		if (idTipaObjekta != null) {
			tipObjektaB = tipObjektaDAO.find(idTipaObjekta);
		}
		if (idOtoka != null) {
			otokB = otokDAO.findByIdFM(idOtoka);
			final Iterator<Mjesto> it = otokB.getMjestos().iterator();
			if (it.hasNext()) {
				zupanijaB = otokB.getMjestos().iterator().next().getZupanija();
			} else {
				zupanijaB = new Zupanija();
				zupanijaB.setNaziv("");
			}
		}

		if (tipParka == null && idParka != null) {
			tipParkaB = parkDAO.find(idParka).getTip().toString();
		} else {
			tipParkaB = tipParka;
		}
	}
}
